#ifndef ADMINMENUWIDGET_H
#define ADMINMENUWIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFormLayout>
#include <QSplitter>
#include <QTableWidget>
#include <QLineEdit>
#include <QComboBox>
#include <QDoubleSpinBox>
#include <QSpinBox>
#include <QTextEdit>
#include <QPushButton>
#include <QLabel>
#include <QHeaderView>
#include <QMessageBox>
#include <QInputDialog>
#include <QProgressBar>
#include <QTimer>
#include <QFileDialog>
#include <QPixmap>
#include <QDir>
#include "../business/menumanager.h"
#include "../data/models.h"
#include "menuitemedidialog.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 管理员菜单管理界面
 * 
 * 提供完整的菜品管理功能：
 * - 菜品的增删改查操作
 * - 分类管理
 * - 库存管理
 * - 搜索和过滤功能
 */
class AdminMenuWidget : public QWidget
{
    Q_OBJECT

public:
    explicit AdminMenuWidget(QWidget *parent = nullptr);
    ~AdminMenuWidget();
    
    /**
     * @brief 设置菜单管理器
     * @param manager MenuManager实例
     */
    void setMenuManager(MenuManager *manager);
    
    /**
     * @brief 刷新数据
     */
    void refreshData();

public slots:
    /**
     * @brief 处理菜单数据变更信号
     */
    void onMenuItemAdded(const MenuItem &item);
    void onMenuItemUpdated(const MenuItem &item);
    void onMenuItemDeleted(const QString &itemId);
    void onStockUpdated(const QString &itemId, int oldStock, int newStock);
    void onCategoriesChanged(const QStringList &categories);
    void onSalesCountUpdated(const QString &itemId, int newSalesCount);
    
    // DataManager信号响应
    void onExternalFileChanged(DataType dataType, const QString& filePath);

private slots:
    /**
     * @brief 界面操作槽函数
     */
    void onMenuItemSelectionChanged();
    void onAddMenuItemClicked();
    void onEditMenuItemClicked();
    void onDeleteMenuItemClicked();
    void onSearchTextChanged();
    void onCategoryFilterChanged();
    void onRefreshClicked();
    void onManageCategoriesClicked();
    
    /**
     * @brief 表格操作槽函数
     */
    void onTableItemDoubleClicked(int row, int column);
    void onTableContextMenuRequested(const QPoint &pos);

signals:
    /**
     * @brief 状态消息信号
     */
    void statusMessageChanged(const QString &message, int timeout = 0);

private:
    /**
     * @brief 界面初始化
     */
    void setupUI();
    void setupMenuTable();
    void setupConnections();
    void applyStyles();
    
    /**
     * @brief 数据操作
     */
    void loadMenuData();
    void updateMenuTable();
    void updateCategoryFilter();
    void filterMenuData();
    

    
    /**
     * @brief 辅助方法
     */
    void showStatusMessage(const QString &message, bool isError = false);
    void enableOperationButtons(bool enabled);
    int getSelectedRowIndex();
    QString getSelectedMenuItemId();
    
    /**
     * @brief 分类管理
     */
    void showCategoryManagementDialog();
    
    /**
     * @brief 菜品详情对话框
     */
    void showMenuItemDetailsDialog(const MenuItem &item);
    QString getMessageBoxStyleSheet() const;

private:
    // 核心组件
    MenuManager *m_menuManager;
    
    // 主布局
    QVBoxLayout *m_mainLayout;
    
    // 搜索和过滤
    QLabel *m_searchLabel;
    QLineEdit *m_searchEdit;
    QLabel *m_categoryLabel;
    QComboBox *m_categoryFilter;
    QPushButton *m_refreshButton;
    QPushButton *m_manageCategoriesButton;
    
    // 菜品表格
    QTableWidget *m_menuTable;
    
    // 操作按钮
    QHBoxLayout *m_buttonLayout;
    QWidget *m_buttonWidget;
    QPushButton *m_addButton;
    QPushButton *m_editButton;
    QPushButton *m_deleteButton;
    
    // 状态显示
    QPushButton *m_statusLabel;
    QProgressBar *m_progressBar;
    
    // 数据和状态
    QList<MenuItem> m_allMenuItems;
    QList<MenuItem> m_filteredMenuItems;
    QStringList m_categories;
    
    // 定时器
    QTimer *m_searchTimer;
    
    // 表格列索引 - 移除创建时间列
    enum TableColumn {
        COL_ID = 0,
        COL_NAME = 1,
        COL_CATEGORY = 2,
        COL_PRICE = 3,
        COL_STOCK = 4,
        COL_SALES = 5,
        COL_COUNT = 6  // 更新总列数
    };
};

#endif // ADMINMENUWIDGET_H
